/*File Name		: ListOfName.cpp*/
/*Date			: 30-10-2012 */
/*Maker Name	: Jonathan Ery Pradana / 23512038*/
/*Mendeskripsikan definisi Class ListOfName*/

#include "ListOfName.h"

/** 4 sekawan **/
ListOfName::ListOfName()
/* Constructor: membuat ListOfName default (constructor vector otomatis dipanggil oleh sistem) */
{
	
}

ListOfName::ListOfName(vector<string> L)
/* Constructor: membuat ListOfName berdasarkan parameter vector event */
{
	int i;
	
	for(i = 0;i<L.size();i++){
		this->name.insert(this->name.end(),1,L[i]);
	}
}

ListOfName::ListOfName(string s)
/* Constructor: membuat ListOfName berdasarkan string */
/* Prekondisi: format string sudah valid: "name1,name2,..." */
{
	MakeFromString(s);
}

ListOfName::ListOfName(const ListOfName& L)
/* Copy constructor */
{
	int i;
	for(i = 0;i<L.name.size();i++){
		this->name.insert(this->name.end(),1,L.name[i]);
	}
}

ListOfName& ListOfName::operator=(const ListOfName& L)
/* Overloading operator = */
{
	int i;
	
	if(this->name.size() > 0){
		this->name.erase(this->name.begin(),this->name.end());
	}
	for(i = 0;i<L.name.size();i++){
		this->name.insert(this->name.end(),1,L.name[i]);
	}
	
	return *this;
}

ListOfName::~ListOfName()
/* Destructor */
{
	this->name.erase(this->name.begin(),this->name.end());	
}

/** Getter & Setter **/
vector<string> ListOfName::GetListOfName()
/* Mengembalikan name */
{
	return this->name;
}

void ListOfName::setListOfName(vector<string> L)
/* Mengeset name dengan parameter */
/* I.S. ListOfName sudah terbentuk */
/* F.S. name sesuai dengan parameter */
{
	this->name = L;
}

/** Override method **/
void ListOfName::Print()
/* I.S. ListOfName terdefinisi */
/* F.S. Nilai ListOfName ditulis ke layar beserta komponen-komponennya */
/* Proses : Menulis nilai setiap komponen ListOfName ke layar */
{
	cout << this->ToString();
}

void ListOfName::Read()
/* I.S. Sembarang */
/* F.S. ListOfName terdefinisi dan merupakan ListOfName yang valid */
/* Proses : Membaca komponen ListOfName dari masukan pengguna */
{
	string name;
	
	cout << "  Masukkan nama peserta, akhiri dengan memasukkan # :";
	getline(cin,name);
	while(name.compare("#") != 0){
		this->name.insert(this->name.end(),1,name);
		cout << "  Masukkan nama peserta berikutnya, akhiri dengan memasukkan # :";
		getline(cin,name);
	}
}

string ListOfName::ToString()
/* Mengembalikan ListOfName dalam format "name1,name2,..." */
{
	string name;
	string temp;
	int i;
	
	if(this->name.size() == 0){
		temp = "Kosong";
	}else{
		temp = this->name[0];
		i = 1;
		while (i<this->name.size()){
			temp = temp + "," + this->name[i];
			i++;
		}
	}
	return temp;
}

void ListOfName::MakeFromString(string s)
/* Membentuk ListOfName dari elemen yang bertipe string */
/* I.S. format string sesuai: "name1,name2,..." */
/* F.S. ListOfName terdefinisi */
{
	int delim;
	string temp,p;
	if (this->name.size() > 0){
		this->name.erase(this->name.begin(),this->name.end());
	}
	temp = s;
	p = s;
	delim = p.find(",");
	while (delim != string::npos){
		p = temp.substr(0,delim);
		this->name.insert(this->name.end(),1,p);
		temp = temp.substr(delim+1,temp.length()-delim+1);
		delim = temp.find(",");
	}
	this->name.insert(this->name.end(),1,temp);
}
